﻿using SharpArch.Core.DomainModel;
using SharpArch.Core.PersistenceSupport;
using NHibernate.Validator.Constraints;
using SharpArch.Core;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Collections.Generic;
using System;

namespace zeus.Core
{
    public class Usuario: Entity
    {
              
        public Usuario()
        {
            UsuarioReportes = new List<UsuarioReporte>();
            Unidades = new List<UsuarioUnidad>();
        }

        [DisplayName("País")]
        public virtual int CodigoPais { get; set; }

        [DisplayName("Idioma")]
        public virtual int CodigoIdioma { get; set; }

        public virtual int CodigoCliente { get; set; }

        [Required(ErrorMessage = "Ingrese Nombre")]
        [DisplayName("Nombre Completo")]
        public virtual string Nombre { get; set; }

        [Required(ErrorMessage = "Ingrese Usuario")]
        [DisplayName("Nombre de Usuario")]
        public virtual string Login { get; set; }

        [Required(ErrorMessage = "Ingrese Clave")]
        [DisplayName("Clave")]
        public virtual string Clave { get; set; }

        [Required(ErrorMessage = "Ingrese Empresa")]
        [DisplayName("Compañía")]
        public virtual string Empresa { get; set; }

        [Required(ErrorMessage = "Ingrese Ciudad")]
        [DisplayName("Ciudad")]
        public virtual string Ciudad { get; set; }

        [Required(ErrorMessage = "Ingrese Direccion")]
        [DisplayName("Dirección")]
        public virtual string Direccion { get; set; }

        [Required(ErrorMessage = "Ingrese Teléfono")]
        [DisplayName("Teléfono")]
        public virtual string Telefono1 { get; set; }
               
        [Required(ErrorMessage = "Ingrese Correo Electrónico")]
        [RegularExpression("^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$", ErrorMessage = "Ingrese un mail válido")]
        [DisplayName("Correo Electrónico")]
        public virtual string Mail { get; set; }

        [DisplayName("Código Postal")]
        public virtual string Postal { get; set; }

        [DisplayName("Distancia entre unidades")]
        public virtual int Distancia { get; set; }

        [DisplayName("Velocidad de las unidades")]
        public virtual int Velocidad { get; set; }

        [DisplayName("Zona Horaria")]
        public virtual int ZonaHoraria { get; set; }

        [DisplayName("Default map type")]
        public virtual int Mapa { get; set; }

        [DisplayName("Mostrar todas las unidades en el mapa")]
        public virtual bool MostrarUnidades { get; set; }

        [DisplayName("Mostrar coordenadas en los reportes")]
        public virtual bool MostrarCoordenadas { get; set; }

        [DisplayName("La cuenta se encuentra activa")]
        public virtual bool Activo { get; set; }

        [DisplayName("Mapas de Flash")]
        public virtual bool MapaFlash { get; set; }

        [Required(ErrorMessage = "Ingrese Rol")]
        [DisplayName("Rol")]        
        public virtual string Rol { get; set; }

        public virtual Cliente Cliente { get; set; }
                                
        public virtual IList<UsuarioReporte> UsuarioReportes { get; set; }

        public virtual IList<UsuarioUnidad> Unidades { get; set; }
                
        public virtual void AddReporte(UsuarioReporte usuarioReporte)
        {
            if (usuarioReporte.Usuario != null)
                usuarioReporte.Usuario.UsuarioReportes.Remove(usuarioReporte);

            usuarioReporte.Usuario = this;            
            UsuarioReportes.Add(usuarioReporte);
        }

    }
}
